package cn.itcast.nems.oldems.service.impl;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.base.api.ClassTypeApi;
import cn.itcast.nems.base.dao.entity.ClassType;
import cn.itcast.nems.base.dao.mapper.ClassTypeMapper;
import cn.itcast.nems.base.dto.ClassTypeDTO;
import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.manager.util.CustomBeanUtil;
import cn.itcast.nems.oldems.service.ClassTypeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Service
@Slf4j
public class ClassTypeServiceImpl extends ServiceImpl<ClassTypeMapper, ClassType> implements ClassTypeApi, ClassTypeService {
    @Override
    public Page<ClassTypeDTO> findPage(PageQueryModel<ClassTypeDTO> queryModel) {
        ClassTypeDTO classTypeDTO = queryModel.getCondition();
        com.baomidou.mybatisplus.extension.plugins.pagination.Page<ClassType> page =
                new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>();
        page.setCurrent(queryModel.getPageNumber());
        page.setSize(page.getSize());
        IPage<ClassType> result = getBaseMapper().selectPage(page, new LambdaQueryWrapper<ClassType>()
                .eq(StringUtils.hasText(classTypeDTO.getSubjectId()) ,ClassType::getSubjectId, classTypeDTO.getSubjectId())
                .eq(StringUtils.hasText(classTypeDTO.getId()), ClassType::getId, classTypeDTO.getId())
                .like(StringUtils.hasText(classTypeDTO.getName()), ClassType::getName, classTypeDTO.getName())
                .orderByDesc(ClassType::getId));
        List<ClassTypeDTO> list = null;
        if (Objects.nonNull(result) && !CollectionUtils.isEmpty(result.getRecords())) {
            list = result.getRecords().stream().map(item -> {
                return CustomBeanUtil.copyProperties(item, new ClassTypeDTO());
            }).collect(Collectors.toList());
        }
        return Page.of(queryModel.getPageNumber(), queryModel.getPageSize(), Long.valueOf(result.getTotal()).intValue(), list);
    }
}
